package com.demo.util;

import com.demo.common.ResultData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

/**
 * @author wangfengchen
 */
public class UploadFileUtil {


  /**
   * 上传文件
   *
   * @param multipartFile 文件对象
   * @param dir           上传目录
   * @return
   */
  public static ResultData<Object> uploadFile(MultipartFile multipartFile, String dir) {
    try {
      if (multipartFile.isEmpty()) {
        return ResultData.fail("请选择文件");
      }
      // 获取文件的名称
      String originalFilename = multipartFile.getOriginalFilename();
      // 文件后缀 例如：.png
      String fileSuffix = null;
      if (StringUtils.isNotBlank(originalFilename)) {
        int index = originalFilename.lastIndexOf(".");
        if (index != -1) {
          fileSuffix = originalFilename.substring(index);
        }
      }
      // uuid 生成文件名
      String uuid = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
      // 根路径，在 resources/static/upload
      String basePath = ResourceUtils.getURL("classpath:").getPath() + "static" + File.separator + "upload" + File.separator + (StringUtils.isNotBlank(dir) ? (dir + File.separator) : "");
      // 新的文件名，使用uuid生成文件名
      String fileName = uuid;
      if (StringUtils.isNotBlank(fileSuffix)) {
        fileName = fileName + fileSuffix;
      }
      // 创建新的文件
      File fileExist = new File(basePath);
      // 文件夹不存在，则新建
      if (!fileExist.exists()) {
        fileExist.mkdirs();
      }
      // 获取文件对象
      File file = new File(basePath, fileName);
      // 完成文件的上传
      multipartFile.transferTo(file);
      // 返回绝对路径
      return ResultData.success("上传成功");
    } catch (Exception e) {
      e.printStackTrace();
    }
    return ResultData.fail("上传失败");
  }
}
